
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <functional>
#include <thread>
#include <iostream>
#include <Windows.h>
#include <chrono>
#include <string>
#include <sstream>
#include <iosfwd>
#include <iomanip>

using namespace std;

constexpr int64_t SEC = 1000000;
constexpr int64_t MIN = SEC * 60;
constexpr int64_t HOUR = MIN * 60;
constexpr int64_t DAY = HOUR * 24;

// 返回当前时间作为 格林威治(GMT)时间 距离 GMT时间 1970-1-1 00:00:00 的微秒数

int64_t get_time();
int64_t get_time_us_greenwich();
// 返回当前时间作为 本地（北京）时间 距离 GMT时间 1970-1-1 00:00:00 的微秒数，等于get_gmtime_us加8小时
int64_t get_localtime_us();
// 格林威治时间的微秒数格式化成本地时间字符串
string gmtime2localstr(int64_t time_us, const string& fmt="%Y-%m-%d %H:%M:%S");
// 本地时间字符串解析成格林威治时间的微秒数
int64_t localstr2gmtime(const std::string& s, const std::string& fmt="%Y-%m-%d %H:%M:%S");

// 字符串转微秒数，不考虑时区
std::string time2strgm(int64_t time_us, const std::string& fmt="%Y-%m-%d %H:%M:%S");
std::string time2strlocal(int64_t time_us,const std::string &fmt="%Y-%m-%d %H:%M:%S");
// 返回当前的标准时间
std::string stdtime();
// 微秒数转字符串，不考虑时区
int64_t str2time(const std::string& s, const std::string& fmt="%Y-%m-%d %H:%M:%S");

void time_add();